/**
1.Collection接口
Collection层次结构中的根接口。Collection表示一组对象，这些对象也称为colletion的元素。
一些colletion允许有从夫的元素，而另一些则不允许。一些COLLETION是有序的，
而另一些则是无序的。JDK不提供此接口的任何直接实现;它提供更具体的子接口(如Set和List)实现。
此接口通常用来传递Collection，并在需要最大普遍性的地方操作这些Collection。

2.List接口 (此页重点）
public interface List<E>extends Collection<E>
有序的collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制。
用户可以根据元素地整数索引（在列表中地位置）访问元素，并搜索列表中的元素。
集合中分为三大接口
Collection，Map，Iterator

############################################
1.有序的
2.允许多个NULL元素
3.常用实现类：ArrayList，Vector,LinkedList
需考虑问题
1.安全性
2.是否频繁插入，删除
3.是否是存储后遍历
############################################

3.具体实现类
ArrayList
public class ArrayList<E>extends AbstractList<E>
implements List<E>,RandomAccess,Cloneable,Serializable
List接口的大小 可变数组的实现，实现了所有可选列表操作，并允许包括null在内的所有元素。
除了实现List接口外，此类还提供一些方法来操作内部用来存储列表的数组的大小。

Linkedlist
public class LinkedList<E>extends AbstractSequentialList<E>
implements List<E>,Deque<E>,Cloneable,Serializable



List接口的连接列表实现。实现所有可选的列表操作，并且允许所有元素（包括NULL）。除了
实现List接口外，LinkedListL类还为在列表的开头及结尾get，remove和insert元素
提供了统一的命名方法。



集合框架图


Iterator《-----------			Collection		<--------------Map
	|								|							|
ListIterator<-----			(list			set)	(TreeMap		HashMap)
								|										|
		(ArrayList  LinkedList  Vector)	(HashSet  TreeSet)			LinkedHashMap
		
													______Utilities_________
	comparable---------comparator				 (Collections		  Arrays)
--------------------------------------------------
array [ 1,2,3,4,5]
list 是下面2个的父类    [int[]a,String[]b,char[]c]    list<int>[[int[]a,int[]b,int]c]]
array list	  [int[]a,String[]b,char[]c] 
linked list   [ int[]a<->int[b]<->char[]c ]
 */
/*
package com.leo.第九章_集合;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.util.LinkedList;

public class U9_L1_List接口 {

	public static void main(String[] args) throws UnsupportedEncodingException {
		// TODO Auto-generated method stub
		arraylist();
	}
	//ArrayList 
	//默认构造方法创建一个空数组  Object[]
	//动态对象数组算法 （容量）
	//1.未使用：默认元素是0  
	//2.使用： (1).使用初始化为10 (2).使用后添加元素 数组扩容 1.5倍
	//3.不适合进行删除或插入操作
	//4.为了放置数组动态扩充次数过多，建议创建ArrayList时，给定初始容量
	//5.线程不安全，适合在单线程访问时使用
	private static void arraylist() throws UnsupportedEncodingException {
		//1.list 是一个接口 ，ArrayList 是具体实现类主要负责 数组列表事宜
		//2.<>这个是包装标签 也就是可以选择 ArrayList对象的类型 （Object 是所有类型）
		//3.<>里填的是包装类 Short Integer Long Character Float Double Boolean 或引用类型
		List<String> list1=new ArrayList<>();
		list1.add("3");
		list1.add("这是字符串");
		list1.add("this is a str");
		List<Object> list = new ArrayList<>();
		String a="你好！";
		
		//把字符串包装成 字节数组  和字符数组
		byte[]list_byte1=a.getBytes();
		char[]list_char1=a.toCharArray();
		//把数据丢进 ArrayList 的对象 list 里面
		list.add(1);
		list.add("ss");
		list.add("ff");
		list.add(list_byte1);
		list.add(list_char1);
		list.addAll(list1);
		// 遍历 list1 里面的所有元素
		for(int i=0;i<list1.size();i++) {
			System.out.println(list1.get(i));
		}
		System.out.println("*************\n");
		// 遍历 list 里面的所有元素 因为有数组 所有需要遍历第二层 
		// 把遍历的元素再打包成字节数组 和字符数组
		Object [] list_str1=new Object[list.size()];
		list.toArray(list_str1);
		for(Object str:list_str1) {
			System.out.println(str);
		}
		//做筛选 现在是Object[] 需要用各种类型的array去找到每个数组中的元素
		for(int i=0;i<list.size();i++) {
			if((list.get(i).toString()).startsWith("[C")) {
				char[]list_str_char1=(char[]) list.get(i);
				for(char ele:list_str_char1) {
					System.out.print(ele);
				}
			}
			if((list.get(i).toString()).startsWith("[B")) {
				
				byte[]list_str_byte1=(byte[]) list.get(i);
				for(byte ele:list_str_byte1) {
					System.out.print(ele);
				}
			}
			
			System.out.println(list.get(i));
			
		}
		String [] list_str=list1.toArray(new String[] {});
		for(String str:list_str) {
			System.out.println(str);
		}
	}
	//Vector
	//1.实现原理，采用动态对象数组实现，默认构造创建10个大小
	//2.扩容算法 增量=0(刚好）  扩容为2倍 ，增量大于0  原来大小+增量
	//3.多线程安全，单线程效率比arraylist 低
	private static void vector() {
		Vector<String> v=new Vector<> ();
		v.add("this is a str.");
		v.add("2.this is a pen.");
		v.add("3.this is a banana");
		
		for (int i=0;i<v.size();i++) {
			System.out.println(v.get(i));
		}
	}
	
	private static void linkedlist() {
		LinkedList<String> ll=new LinkedList<>();
		ll.add("ss");
	}
}
*/
package com.leo.第九章_集合;


 

